An Internet Protocol Version 6 address (IPv6 address) is a numerical label that is used to identify a network interface of a computer or other network node participating in an IPv6-enabled computer network.
IP addresses serve the purpose of uniquely identifying the individual network interface(s) of a host, locating it on the network, and thus permitting the routing of IP packets between hosts. For routing, IP addresses are present in fields of the packet header where they indicate source and destination of the packet.
IPv6 is the successor to the Internet's first addressing infrastructure, Internet Protocol version 4 (IPv4). In contrast to IPv4, which defined an IP address as a 32-bit number, IPv6 addresses have a size of 128 bits. Therefore, IPv6 has a vastly enlarged address space compared to IPv4.
IPv6 addresses are classified by the primary addressing and routing methodologies common in networking: unicast addressing, anycast addressing, and multicast addressing.[1]
IPv6 does not implement broadcast addressing. Broadcast's traditional role is subsumed by multicast addressing to the all-nodes link-local multicast group ff02::1. However, the use of the all-nodes group is not recommended, and most IPv6 protocols use a dedicated link-local multicast group to avoid disturbing every interface in the network.
An IPv6 address consists of 128 bits.[1] Addresses are classified into various types for applications in the major addressing and routing methodologies: unicast, multicast, and anycast networking. In each of these, various address formats are recognized by logically dividing the 128 address bits into bit groups and establishing rules for associating the values of these bit groups with special addressing features.
Unicast and anycast addresses are typically composed of two logical parts: a 64-bit network prefix used for routing, and a 64-bit interface identifier used to identify a host's network interface.
bits | 48 (or more) | 16 (or fewer) | 64 |
---|---|---|---|
field | routing prefix | subnet id | interface identifier |
The network prefix (the routing prefix combined with the subnet id) is contained in the most significant 64 bits of the address. The size of the routing prefix may vary; a larger prefix size means a smaller subnet id size. The bits of the subnet id(entifier) field are available to the network administrator to define subnets within the given network. The 64-bit interface identifier is either automatically generated from the interface's MAC address using the modified EUI-64 format, obtained from a DHCPv6 server, automatically established randomly, or assigned manually.
A link-local address is also based on the interface identifier, but uses a different format for the network prefix.
bits | 10 | 54 | 64 |
---|---|---|---|
field | prefix | zeroes | interface identifier |
The prefix field contains the binary value 1111111010. The 54 zeroes that follow make the total network prefix the same for all link-local addresses, rendering them non-routable.
Multicast addresses are formed according to several specific formatting rules, depending on the application.
bits | 8 | 4 | 4 | 112 |
---|---|---|---|---|
field | prefix | flg | sc | group ID |
The prefix holds the binary value 11111111 for any multicast address.
Currently, 3 of the 4 flag bits in the flg field are defined;[1] the most-significant flag bit is reserved for future use.
bit | flag | Meaning when 0 | Meaning when 1 |
---|---|---|---|
8 | reserved | reserved | reserved |
9 | R (Rendezvous)[3] | Rendezvous point not embedded | Rendezvous point embedded |
10 | P (Prefix)[4] | Without prefix information | Address based on network prefix |
11 | T (Transient)[1] | Well-known multicast address | Dynamically assigned multicast address |
The 4-bit scope field (sc) is used to indicate where the address is valid and unique.
There are special multicast addresses, like Solicited Node.
bits | 8 | 4 | 4 | 79 | 9 | 24 |
---|---|---|---|---|---|---|
field | prefix | flg | sc | zeroes | ones | unicast address |
The sc(ope) field holds the binary value 0010 (link-local). Solicited-node multicast addresses are computed as a function of a node's unicast or anycast addresses. A solicited-node multicast address is created by copying the last 24 bits of a unicast or anycast address to the last 24 bits of the multicast address.
bits | 8 | 4 | 4 | 4 | 4 | 8 | 64 | 32 |
---|---|---|---|---|---|---|---|---|
field | prefix | flg | sc | res | riid | plen | network prefix | group ID |
Link-scoped multicast addresses use a comparable format.[5]
An IPv6 address is represented as eight groups of four hexadecimal digits, each group representing 16 bits (two octets). The groups are separated by colons (:). An example of an IPv6 address is:
The hexadecimal digits are case-insensitive when used, but should be represented in lower case.[6]
The full representation of eight 4-digit groups may be simplified by several techniques, eliminating parts of the representation.
Leading zeroes in a group may be omitted, but each group must contain at least one hexadecimal digit.[1] Thus, the example address may be written as:
One or more consecutive groups of zero value may be replaced with a single empty group using two consecutive colons (::).[1] Substitution may only be applied once in an address, because multiple occurrences would create an ambiguous representation. If more than one such substitution could be applied, the substitution that replaces the most groups should be used; if the number of groups are equal then the leftmost substitution should be used.[6] With these rules, the example address is further simplified:
The localhost (loopback) address, 0:0:0:0:0:0:0:1, and the IPv6 unspecified address, 0:0:0:0:0:0:0:0, are reduced to ::1 and ::, respectively.
During the transition of the Internet from IPv4 to the IPv6 it is typical to operate in a mixed addressing environment, and for this purpose a special notation has been introduced to express IPv4-mapped and IPv4-compatible IPv6 addresses by writing the final 32 bits of an address in the familiar IPv4 dotted-quad notation. For example, the IPv4-mapped IPv6 address ::ffff:c000:280 is usually written as ::ffff:192.0.2.128, thus expressing clearly the original IPv4 address that was mapped to IPv6.
An IPv6 network uses an address block that is a contiguous group of IPv6 addresses of a size that is a power of two. The leading set of bits of the addresses are identical for all hosts in a given network, and are called the network's address or routing prefix.
Network address ranges are written in CIDR notation. A network is denoted by the first address in the block (ending in all zeroes), a slash (/), and a decimal value equal to the size in bits of the prefix. For example, the network written as 2001:db8:1234::/48 starts at address 2001:db8:1234:0000:0000:0000:0000:0000 and ends at 2001:db8:1234:ffff:ffff:ffff:ffff:ffff.
The routing prefix of an interface address may be directly indicated with the address by CIDR notation. For example, the configuration of an interface with address 2001:db8:a::123 connected to subnet 2001:db8:a::/64 is written as 2001:db8:a::123/64.
The size of a block of addresses is indicated simply by a slash (/) and the decimal size of the network prefix, without specifying which specific addresses are in the block. For instance, an address block with 48 bits in the prefix is indicated by /48. Such a block contains 2128 − 48 = 280 addresses. The smaller the size of the network prefix, the larger the block: a /21 block is 8 times larger than a /24 block.
Colon (:) characters in IPv6 addresses may conflict with the established syntax of resource identifiers, such as URIs and URLs. The colon has traditionally been used to terminate the host path before a port number.[7] To alleviate this conflict, literal IPv6 addresses are enclosed in square brackets in such resource identifiers, for example:
When the URL also contains a port number the notation is:
In Microsoft Windows operating systems, IPv4 addresses are valid location identifiers in Uniform Naming Convention (UNC) path names. However, the colon is an illegal character in a UNC path name. Thus, the use of IPv6 addresses is also illegal in UNC names. For this reason, Microsoft implemented a transcription algorithm to represent an IPv6 address in form of a domain name that can be used in UNC paths. For this purpose, Microsoft registered and reserved the second-level domain ipv6-literal.net on the Internet. IPv6 addresses are transcribed as a hostname or subdomain name within this name space, in the following fashion:
is written as
This notation is automatically resolved by Microsoft software without any queries to DNS name servers. If the IPv6 address contains a zone index, it is appended to the address portion after an 's' character:
Every IPv6 address, except the unspecified address (::), has a "scope",[8] which specifies in which part of the network it is valid.
In the unicast addressing class, link-local addresses and the loopback address have link-local scope, which means they are to be used in the directly attached network (link). All other addresses, have global (or universal) scope, which means they are globally routable, and can be used to connect to addresses with global scope anywhere, or addresses with link-local scope on the directly attached network.
The scope of an anycast address is defined identically to that of a unicast address.
For multicasting, the four least-significant bits of the second address octet of a multicast address (ff0s::) identify the address scope, i.e. the span over which the multicast address is propagated. Currently defined scopes[1] are:
Value | Scope name | Notes |
---|---|---|
0x0 | reserved | |
0x1 | interface-local | Interface-local scope spans only a single interface on a node, and is useful only for loopback transmission of multicast. |
0x2 | link-local | Link-local and site-local multicast scopes span the same topological regions as the corresponding unicast scopes. |
0x4 | admin-local | Admin-local scope is the smallest scope that must be administratively configured, i.e., not automatically derived from physical connectivity or other, non- multicast-related configuration. |
0x5 | site-local | Link-local and site-local multicast scopes span the same topological regions as the corresponding unicast scopes. |
0x8 | organization-local | Organization-local scope is intended to span multiple sites belonging to a single organization. |
0xe | global | |
0xf | reserved |
The management of IPv6 address allocation process is delegated to the Internet Assigned Numbers Authority (IANA)[9] by the Internet Architecture Board and the Internet Engineering Steering Group. Its main function is the assignment of large address blocks to the regional Internet registries (RIRs), which have the delegated task of allocation to network service providers and other local registries. The IANA has maintained the official list of allocations of the IPv6 address space since December 1995.[10]
Only one eighth of the total address space is currently allocated for use on the Internet, 2000::/3, in order to provide efficient route aggregation, thereby reducing the size of the Internet routing tables; the rest of the IPv6 address space is reserved for future use or for special purposes. The address space is assigned to the RIRs in large blocks of /23 up to /12.[11]
The RIRs assign smaller blocks to Local Internet registries that distributes them to users. These are typically in sizes from /19 to /32.[12][13][14] The addresses are typically distributed in /48 to /56 sized blocks to the end users.[15]
Global unicast assignment records can be found at the various RIRs or other websites.[16]
IPv6 addresses are assigned to organizations in much larger blocks as compared to IPv4 address assignments—the recommended allocation is a /48 block which contains 280 addresses, being 248 or about 2.8×1014 times larger than the entire IPv4 address space of 232 addresses and about 7.2×1016 times larger than the /8 blocks of IPv4 addresses, which are the largest allocations of IPv4 addresses. The total pool, however, is sufficient for the foreseeable future, because there are 2128 or about 3.4×1038 (340 trillion trillion trillion) unique IPv6 addresses.
Each RIR can divide each of its multiple /23 blocks into 512 /32 blocks, typically one for each ISP; an ISP can divide its /32 block into 65536 /48 blocks, typically one for each customer;[17] customers can create 65536 /64 networks from their assigned /48 block, each having a number of addresses that is the square of the number of addresses of the entire IPv4 address space, which only supports 232 or about 4.3×109 addresses.
By design, only a very small fraction of the address space will actually be used. The large address space ensures that addresses are almost always available, which makes the use of network address translation (NAT) for the purposes of address conservation almost unnecessary. NAT has been increasingly used for IPv4 networks to help alleviate IPv4 address exhaustion.
To allow for provider changes without renumbering, Provider-independent address space – assigned directly to the end user by the RIRs – is taken from the special range 2001:678::/29.
Internet Exchange Points (IXPs) are assigned special addresses from the range 2001:7f8::/29 for communication with their connected ISPs.[18] Root name servers have been assigned addresses from the same range.
The lowest address within each subnet prefix (the interface identifier set to all zeroes) is reserved as the "subnet-router" anycast address.[1] Applications may use this address when talking to any one of the available routers, as packets sent to this address are delivered to just one router.
The 128 highest addresses within each /64 subnet prefix are reserved to be used as anycast addresses.[19] These addresses usually have the 57 first bits of the interface identifier set to 1, followed by the 7-bit anycast ID. Prefixes for the network, including subnets, are required to have a length of 64 bits, in which case the universal/local bit must be set to 0 to indicate the address is not globally unique. The address with value 0x7e in the 7 least-significant bits is defined as a mobile IPv6 home agents anycast address. The address with value 0x7f (all bits 1) is reserved and may not be used. No more assignments from this range are made, so values 0x00 through 0x7d are reserved as well.
There are a number of addresses with special meaning in IPv6:[20]
IANA has reserved a so-called 'Sub-TLA ID' address block for special assignments[24] which consists of 64 network prefixes in the range 2001:0000::/29 through 2001:01f8::/29. Three assignments from this block have been made:
The multicast addresses ff00::0/12 are reserved[1] and should not be assigned to any multicast group. The Internet Assigned Numbers Authority (IANA) manages address reservations.[29]
Some common IPv6 multicast addresses are the following:
Address | Description | Available Scopes |
---|---|---|
ff0X::1 | All nodes address, identify the group of all IPv6 nodes | Available in scope 1 (interface-local) and 2 (link-local):
|
ff0X::2 | All routers | Available in scope 1 (interface-local), 2 (link-local)
and 5 (site-local):
|
ff02::5 | OSPFIGP | 2 (link-local) |
ff02::6 | OSPFIGP Designated Routers | 2 (link-local) |
ff02::9 | RIP Routers | 2 (link-local) |
ff02::a | EIGRP Routers | 2 (link-local) |
ff02::d | All PIM Routers | 2 (link-local) |
ff0X::fb | mDNSv6 | Available in all scopes |
ff0X::101 | All Network Time Protocol (NTP) servers | Available in all scopes |
ff02::1:1 | Link Name | 2 (link-local) |
ff02::1:2 | All-dhcp-agents | 2 (link-local) |
ff02::1:3 | Link-local Multicast Name Resolution | 2 (link-local) |
ff05::1:3 | All-dhcp-servers | 5 (site-local) |
ff02::1:ff00:0/104 | Solicited-node multicast address. See below | 2 (link-local) |
ff02::2:ff00:0/104 | Node Information Queries | 2 (link-local) |
The least significant 24 bits of the Solicited-node multicast address group ID are filled with the least significant 24 bits of the interface's unicast or anycast address. These addresses allow link-layer address resolution via Neighbor Discovery Protocol (NDP) on the link without disturbing all nodes on the local network. A host is required to join a Solicited-Node multicast group for each of its configured unicast or anycast addresses.
On system startup, a node automatically creates a link-local address on each IPv6-enabled interface, even if globally routable addresses are manually configured or obtained through "configuration protocols" (see below). It does so independently and without any prior configuration by stateless address autoconfiguration (SLAAC),[30] using a component of the Neighbor Discovery Protocol. This address is selected with the prefix fe80::/64.
In IPv4, typical "configuration protocols" include DHCP or PPP. Although DHCPv6 exists, IPv6 hosts normally use the Neighbor Discovery Protocol to create a globally routable unicast address: the host sends router solicitation requests and an IPv6 router responds with a prefix assignment.[31]
The lower 64 bits of these addresses are populated with a 64-bit interface identifier in modified EUI-64 format. This identifier is usually shared by all automatically configured addresses of that interface, which has the advantage that only one multicast group needs to be joined for neighbor discovery. For this, a multicast address is used, formed from the network prefix ff02::1:ff00:0/104 and the 24 least significant bits of the address.
A 64-bit interface identifier is most commonly derived from its 48-bit MAC address. A MAC address 00:1D:BA:06:37:64 is turned into a 64-bit EUI-64 by inserting FF:FE in the middle: 00:1D:BA:FF:FE:06:37:64. When this EUI-64 is used to form an IPv6 address it is modified:[1] the meaning of the Universal/Local bit (the 7th most significant bit of the EUI-64, starting from 1) is inverted, so that a 1 now means Universal. To create an IPv6 address with the network prefix 2001:db8:1:2::/64 it yields the address 2001:db8:1:2:021d:baff:fe06:3764 (with the underlined U/L bit inverted to a 1, because the MAC address is universally unique).
The reason for modifying the U/L bit is that when using manually assigned addresses on an interface it means you can simply assign the address 2001:db8:1:2::1/64 instead of the less appealing and counter-intuitive 2001:db8:1:2:0200::1/64. When manually assigning link-local addresses, the need for this modification is even more apparent: you can assign the short address fe80::1 instead of the long fe80:0:0:0:0200::1.
The assignment of a unicast IPv6 address to an interface involves an internal test for the uniqueness of that address using Neighbor Solicitation and Neighbor Advertisement (ICMPv6 type 135 and 136) messages. While in the process of establishing uniqueness an address has a tentative state.
The node joins the solicited-node multicast address for the tentative address (if not already done so) and sends neighbor solicitations, with the tentative address as target address and the unspecified address (::/128) as source address. The node also joins the all-hosts multicast address ff02::1, so it will be able to receive Neighbor Advertisements.
If a node receives a neighbor solicitation with its own tentative address as the target address, then that address is not unique. The same is true if the node receives a neighbor advertisement with the tentative address as the source of the advertisement. Only after having successfully established that an address is unique may it be assigned and used by an interface.
Each IPv6 address that is bound to an interface has a fixed lifetime. Lifetimes are infinite, unless configured to a shorter period. There are two lifetimes that govern the state of an address: the preferred lifetime and the valid lifetime.[32] Lifetimes can be configured in routers that provide the values used for autoconfiguration, or specified when manually configuring addresses on interfaces.
When an address is assigned to an interface it gets the status "preferred", which it holds during its preferred-lifetime. After that lifetime expires the status becomes "deprecated" and no new connections should be made using this address. The address becomes "invalid" after its valid-lifetime also expires; the address is removed from the interface and may be assigned somewhere else on the Internet.
The globally unique and static MAC addresses, used by stateless address autoconfiguration to create interface identifiers, offer an opportunity to track user equipment—across time and IPv6 network prefix changes—and so users.[33] To reduce the prospect of a user identity being permanently tied to an IPv6 address portion, a node may create temporary addresses with interface identifiers based on time-varying random bit strings[34] and relatively short lifetimes (hours to days), after which they are replaced with new addresses.
Temporary addresses may be used as source address for originating connections, while external hosts use a public address by querying the Domain Name System.
Network interfaces configured for IPv6 in Windows Vista and Windows 2008 Server or later Microsoft systems use temporary addresses by default.
IPv6-enabled network interfaces usually have more than one IPv6 address, for example, a link-local and a global address, and permanent versus temporary addresses. IPv6 introduces the concepts of address scope and selection preference, yielding multiple choices for source and destination address selections in communication with another host.
The preference selection algorithm,[35] which selects the most appropriate address to use in communications with a particular destination (including the use of IPv4-mapped addresses in dual-stack implementations), is based on a user-customizable preference table that associates each routing prefix with a precedence level. The default table is as follows:[35]
Prefix | Precedence | Label |
---|---|---|
::1/128 ::/0 2002::/16 ::/96 ::ffff:0:0/96 |
50 40 30 20 10 |
0 1 2 3 4 |
The default configuration places preference on IPv6, rather than IPv4, and on destination addresses within the smallest possible scope, so that link-local communication is preferred over globally routed paths when otherwise equally suitable. The prefix policy table is similar to a routing table, with the precedence value serving as the role of a link cost, where higher preference is expressed as a larger value. Source addresses are preferred to have the same label value as the destination address. Addresses are matched to prefixes based on the longest matching most-significant bit-sequence. Candidate source addresses are obtained from the operating system and candidate destination addresses may be queried via the Domain Name System (DNS).
Because all link-local addresses in a host have a common prefix, normal routing procedures cannot be used to choose the outgoing interface when sending packets to a link-local destination. A special identifier, known as a zone index,[8] is needed to provide the additional routing information; in the case of link-local addresses, zone indices correspond to interface identifiers.
When an address is written textually, the zone index is appended to the address, separated by a percent sign (%). The actual syntax of zone indices depends on the operating system:
Zone index notations cause syntax conflicts when used in Uniform Resource Identifiers (URI), as the '%' character also designates percent-encoding.[36]
In the Domain Name System hostnames are mapped to IPv6 addresses by AAAA resource records, so-called quad-A records. For reverse lookup the IETF reserved the domain ip6.arpa, where the name space is hierarchically divided by the 1-digit hexadecimal representation of nibble units (4 bits) of the IPv6 address. This scheme is defined in RFC 3596.
As in IPv4, each host is represented in the DNS by two DNS records, an address record and a reverse mapping pointer record. For example, a host computer named derrick in zone example.com has the Unique Local Address fdda:5cc1:23:4::1f. Its quad-A address record is
derrick.example.com. IN AAAA fdda:5cc1:23:4::1f
and its IPv6 pointer record is
f.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.0.0.0.3.2.0.0.1.c.c.5.a.d.d.f.ip6.arpa. IN PTR derrick.example.com.
This pointer record may be defined in a number of zones, depending on the chain of delegation of authority in the zone d.f.ip6.arpa.
The DNS protocol is independent of its Transport Layer protocol. Queries and replies may be transmitted over IPv6 or IPv4 transports regardless of the address family of the data requested.
NAME | Domain name |
TYPE | AAAA (28) |
CLASS | Internet (1) |
TTL | Time to live in seconds |
RDLENGTH | Length of RDATA field |
RDATA | String form of the IPV6 address[1] |
As of 2009, many DNS resolvers in home-networking NAT devices and routers still handle AAAA records improperly.[37] Some of these simply drop DNS requests for such records, instead of properly returning the appropriate negative DNS response. Because the request is dropped, the host sending the request has to wait for a timeout to trigger. This often causes a perceived slow down when connecting to IPv6 hosts.
|